<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        class Animal{
            constructor(name,age){
                this.name = name;
                this.age = age;

            }

            eat(){
                return `${this.name}正在吃`
            }
        }





        class Dog{
            // constructor(name,age){
            //     this.name = name;
            //     this.age = age;

            // }

            // eat(){
            //     return `${this.name}正在吃`
            // }
        }

        class Cat{
            // constructor(name,age){
            //     this.name = name;
            //     this.age = age;

            // }

            // eat(){
            //     return `${this.name}正在吃`
            // }
        }


        class Monkey{
            // constructor(name,age){
            //     this.name = name;
            //     this.age = age;

            // }

            // eat(){
            //     return `${this.name}正在吃`
            // }
        }

        //1. 三个构造函数  属性 和方法 都一样  没必要挨个都写一遍 
        // 可以再写一个构造函数 然后 原来的三个继承于这个构造函数 
        //2. 如果需要扩展一个功能  或者  修改某个功能  
        // 不要直接改源码 可以自己写一个构造函数 继承于 上一层构造函数  
        // 这样能让你写的生效

        // 如果修改功能  不确定这段代码是否被别的地方使用  这时候可以使用单独写一个构造函数 
        // 然后 继承于上一层  

        // 3. 原型链    



        // 总结:
        // 什么是继承  
    
        // 一个构造函数的实例  使用另外一个构造函数的属性和方法     



        function Person(name){
            this.name = name;
        }

        Person.prototype.sayHello = function(){
            console.log('hello world');
        }


        function Student(){

        }

        const s1 = new Student();
        // s1是Student的实例
        // 想让s1 具有 Person的属性和方法  


        // 需要让Student 继承与 Person 



        // es5的继承 
        //  原型链继承 
        //  借用构造函数继承 
        //  组合继承 
        //  拷贝继承 
        //  寄生继承 

        // es6的继承 
        //  类继承  

        // 冒充继承 
         

    </script>
</body>
</html>